Nghastell Newydd Emlyn

Taflen Waith Autofit

  Dydd Sul, 08 Hydref 2017
  0 atebion
  Ymweliadau 3.2K
0
Pleidleisiau
Dadwneud
Mae gen i daflen waith mewn llyfr gwaith sy'n cynnwys dros 400 o resi, 8 colofn a 160 o ystodau wedi'u cyfuno ac fe wnes i wneud llanast o'i ymddangosiad. Chwiliais y rhyngrwyd am VBA Autofit Merged Cells. Nid oes unrhyw un o'r URLs yn llawer o ddefnydd. Mae'r macro ar y wefan hon ar y trywydd iawn ond: -
1) Byddai'n rhaid i mi nodi a theipio'r 160 o ystodau cyfun â llaw.
Ychwanegais chwiliad am ystodau celloedd cyfun.
2) Mae'n defnyddio rhes un i wneud cyfrifiadau celloedd unedig (Cell ZZ1). Rwy'n defnyddio ffont llawer mwy ar gell A1 (Teitl) sy'n arwain at wallau wrth gyfrifo uchder awtoffitio cyfun gofynnol.
Rwy'n defnyddio colofn 1 cell ar y dde ac 1 rhes o dan y data. (Ctrl+Shift+End, ddim yn dod o hyd i'r gell hon)
3) Mae'n ailgyfrifo'r holl gelloedd unedig felly gostyngodd uchder dwy res sy'n cynnwys celloedd unedig a chelloedd normal gan wneud y celloedd arferol yn annarllenadwy.
Dim ond pan fydd yr uchder cyfun gofynnol yn uwch na'r uchder presennol y byddaf yn newid uchder rhes.
4) Mae'r dull ar gyfer copïo data mewn ystodau cyfun i gell ZZ1 yn anghywir, yn seiliedig ar destun yn yr ystod gyfun yn unig, ond heb gymryd i ystyriaeth feintiau ffontiau gwahanol mewn amrywiol gelloedd unedig.
Cywirais y dull copïo.
5) Mae'r macro yn araf: tua 15+ eiliad ar fy nhaflen waith.
Mae diffodd adnewyddu sgrin ac yn ôl ymlaen ar ddiwedd macro yn lleihau hyn i 2 eiliad.

Llwyddais i ddod o hyd i nam cythruddo arall. Awtoffitio'r daflen waith (cyn cywiro'r ystodau cyfun) ac mae'n ystumio sawl rhes. Roedd uchder rhai celloedd “Normal”, a osodwyd i lapio, wedi cynyddu ac roeddent yn ymddangos fel llinell (neu ddwy linell) o destun gyda rhes wag o dan y testun. Dangosodd chwiliad rhyngrwyd ei fod wedi'i achosi gan Excel yn newid yr arddangosfa i gynnwys ffontiau argraffydd. Wedi dod o hyd i “waith o gwmpas”, ychwanegais at y macro:
Cynyddu lled colofnau o ganran fechan.
Awtoffitio pob rhes ar y daflen waith.
Cywiro uchder rhesi er mwyn darparu ar gyfer ystodau wedi'u huno.
Dychwelyd lled colofn i feintiau gwreiddiol.
Wedi unioni hynny, nid yw rhesi gwag bellach yn ymddangos!

Roeddwn i'n meddwl bod popeth yn gywir erbyn hyn ond darganfyddais broblem bellach wedyn. Os byddaf yn cau'r llyfr gwaith a'i ailagor eto, mae'r rhesi gwag yn ôl eto. Edrychais ar Ffeil/Opsiynau ac rwyf wedi chwilio'r Rhyngrwyd am ddull o atal y llyfr gwaith rhag diweddaru'r sgrin arddangos ar gau/agor y llyfr gwaith heb lwyddiant. Roedd yn rhaid i mi ychwanegu Is-Withlyfr Preifat_Open() ar y tab “ThisWorkbook” gyda galwad i redeg y Macro pan agorir y llyfr gwaith.


Opsiwn Eglur

Is-wyliad4 Cyfuno()
Dim WSN Fel Llinyn ' Enw'r Daflen Waith
Dim sht Fel Taflen Waith 'Defnyddir gan "Set"
‘Row Olaf Cyn Hir’ Rhes olaf ym mhob colofn gyda data
‘LastRowCC As Long’ Rhes olaf yn y golofn gyfredol gyda data
‘Olaf Colofn Fel Cyfanrif’ Nifer y golofn olaf ym mhob rhes gyda data
Dim CurrCol Fel Cyfanrif ' Nifer y golofn gyfredol
‘Llythyren Fel Llinyn’ Trosi rhif CurrCol i linyn
Dim ILetter As String ' Mynegai colofn un i'r dde o'r Golofn Olaf
Dim ICell As String 'Cell un golofn ar y dde ac un rhes i lawr ardal data frpm. Defnyddir i gyfrifo uchder cyfuno gofynnol
Dim CRow Cyhyd 'Rhif Rhes Bresennol
Dim TwN Cyhyd ' Trin gwallau
Dim TwD Fel Llinyn ' Trin gwallau
Dim Mgd Fel Boole 'Gwir/Gau Prawf os yw cell yn uno
Dim MgdCellAddr Fel Llinyn 'Yn cynnwys amrediad cyfun fel llinyn
Dim MgdCellStart Fel Llinyn 'Llythyren gychwynnol amrediad celloedd cyfun Wedi'i ddefnyddio e.e. archwilio Colofn B ar gyfer celloedd wedi'u huno, anwybyddwch unrhyw gelloedd wedi'u cyfuno gan ddechrau yng Ngholofn A sy'n ymestyn i golofn B (wedi'i asesu eisoes)
Dim MgdCellStart1 Fel Llinynnol' a ddefnyddir i gyfrifo MgdCellStart
Dim MgdCellStart2 Fel Llinynnol' a ddefnyddir i gyfrifo MgdCellStart
‘OldHeight As Single’ Uchder presennol pob rhes mewn amrediad cyfun
Dim P1 Fel Cyfanrif 'Cyfrif dolen/pwyntydd
‘HenWidth Fel Sengl’ Lled presennol celloedd mewn amrediad cyfun
‘NewHeight Fel Sengl’ Uchder gofynnol pob rhes mewn ystod unedig. Diweddaru rhesi unigol yn gymesur os yw'n fwy na OldHeight
Dim C1 Fel Cyfanrif 'Dolen Colofn gyfrif
Dim R1 Cyhyd â'r Cyfrif Rhes Dolen
Dim Tweak As Single 'Cynnydd bach yn lled y golofn i oresgyn problem rhes wag
Dim neu Ystod Fel Ystod
Ar Gwall Ewch i TomsHandler

Application.ScreenUpdating = Gau ' LLAWER cyflymach 15 eiliad os sgrin updted dim ond 2 eiliad diffodd.
Tweak = 1.04 'Cynyddu lled y golofn 4% cyn Awtoffitio pob rhes.
WSN = ActiveSheet.Name
Colofnau ("A:A").EntireRow.Hidden = Gau

'Dod o hyd i Row a Cholofn Actif Olaf yn y Daflen Waith gyfan gyda Data
Gyda ActiveSheet.UsedRange
LastColumn = Amrediad(Amrediad("A1"), Celloedd(Rows.Count, Columns.Count)).Find(What:="*", LookIn:=xlValues, _
SearchOrder:=xlByColumns, SearchDirection:=xlCynt).Colofn
LastRow = Amrediad(Amrediad("A1"), Celloedd(Rhesi.Cyfrif, Colofnau.Cyfrif)).Dod o hyd i(Beth:="*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlCynt).
Diwedd Gyda
CurrCol = LastColumn + 1 ' hy i'r dde o'r golofn olaf
Os CurrCol < 27 Yna
ILetter = Chr$(CurrCol + 64) 'Colofn Fynegai
arall
ILetter = Chr$(Int((CurrCol - 1) / 26) + 64)
ILetter = ILetter & Chr$(CurrCol - Int((CurrCol - 1) / 26) * 26 + 64) 'Colofn Fynegai os nad yw digid dwbl.wedi trafferthu gyda'r llythyren driphlyg
Gorffennwch Os

'Mae Icell wedi'i leoli i'r dde ac o dan y data. Defnyddir cell i gyfrifo uchder sydd ei angen i ffitio'r amrediad cyfun
ICell = ILetter & LastRow + 1

'Cynyddu lled y golofn ychydig bach i wella byg lapio rhes wag.
Ystod ("A" & LastRow + 1). Dewiswch
Ar gyfer C1 = 1 I'r Golofn Olaf
ActiveCell.ColumnWidth = ActiveCell.ColumnWidth *Tweak' cynyddu lled y golofn fesul tipyn bach i wella nam
ActiveCell.Offset(0, 1).Range("A1").Dewis ' symud un gell i'r dde
Digwyddiadau

'Awtofit Rows (yn anwybyddu rhesi cyfun) gyda lled colofn 4% yn ychwanegol i atal byg rhesi gwag ar rai Rhesi lapio
Celloedd.Dewiswch
Dewis.Rows.AutoFit
Gosod sht = Taflenni Gwaith(WSN) 'sydd eu hangen i ddod o hyd i'r cofnod olaf yn y golofn gyda data

Am CurrCol = 1 I'r Golofn Olaf
'trosi rhif y golofn gyfredol i alffa (naill ai llythyren sengl neu ddwbl)
Os CurrCol < 27 Yna
Llythyren = Chr$(CurrCol + 64)
arall
Llythyren = Chr$(Int((CurrCol - 1) / 26) + 64)
Llythyren = Llythyr a Chr$(CurrCol - Int((CurrCol - 1) / 26) * 26 + 64)
Gorffennwch Os
LastRowCC = sht.Cells(sht.Rows.Count, Letter).End(xlUp).Row 'dod o hyd i'r rhes olaf yn y golofn gyfredol

Ar gyfer CRow = 1 I LastRowCC
Ystod (Llythyr a CRow). Dewiswch
Mgd = ActiveCell.MergeCells ' A yw cell mewn amrediad cyfun
Os Mgd = Gwir Yna 'Os Gwir, yna y mae
'Beth yw'r cyfeiriad amrediad cyfun? echdynnu digid sengl/dwbl ar gyfer dechrau'r ystod
MgdCellAddr = ActiveCell.MergeArea.Address
MgdCellStart1 = Canol(MgdCellAddr, 2, 1)
MgdCellStart2 = Canol(MgdCellAddr, 3, 1)
If MgdCellStart2 = "$" Yna
MgdCellStart = MgdCellStart1
arall
MgdCellStart = MgdCellStart1 & MgdCellStart2
Gorffennwch Os
Os yw MgdCellStart = Llythyren Yna 'A yw colofn gyntaf cell Uno yn hafal i'r golofn gyfredol
Gyda Thaflenni (WSN)
Hen Led = 0
Set oRange = Ystod(MgdCellAddr) 'set oRange i Ystod Cyfunol wedi'i ganfod
Ar gyfer C1 = 1 I oRange.Columns.Count
OldWidth = OldWidth + .Cells(1, oRange.Column + C1 - 1).ColumnWidth 'Cronni lled colofn ar gyfer ystod o gelloedd (gyda 4% wedi'i ychwanegu)
Digwyddiadau
Hen Uchder = 0
Ar gyfer R1 = 1 I oRange.Rows.Count
OldHeight = OldHeight + .Cells(CRow, oRange.Row + R1 - 1).RowHeight 'Cronni uchder rhes presennol ar gyfer ystod o gelloedd
Digwyddiadau
oRange.MergeCells = Ffug
.Range(Letter & CRow).Copy Destination:=Ystod(ICell) 'Copïo testun A maint ffont, nid gwerthoedd yn unig
.Range(ICell).WrapText = Gwir 'lapio ICell
.Columns(ILetter).ColumnWidth = OldWidth 'newid lled colofn yn cynnwys ICell i ddynwared amrediad presennol
.Rows(LastRow + 1).EntireRow.AutoFit 'Awtoffitio'r rhes ICell, yn barod i fesur yr uchder cyfun angenrheidiol
oRange.MergeCells = Gwir ' Ailosod yr Ystod cyfunedig yn ôl i unedig
oRange.WrapText = Gwir ' a lapio
'Mesur uchder gofynnol ar gyfer amrediad cyfun
NewHeight = .Rows(LastRow + 1).RowHeight
'A yw'r uchder gofynnol Newydd yn uwch na'r Hen uchder presennol
Os NewHeight > OldHeight Yna
Ar gyfer R1 = CRow I CRow + oRange.Rows.Count - 1
'Cynyddu pob rhes yn yr ystod pro rata
Amrediad(ILetter & R1).RowHeight = Ystod(ILetter & R1).RowHeight * NewHeight / OldHeight
Digwyddiadau
arall
'lle digonol mewn cell unedig
Gorffennwch Os
CRow = CRow + oRange.Rows.Count - 1 'arall ar ystod multirow, bydd yn disgyn i lawr i 2il res o ystod ac yn ailadrodd cyfrifiad wrth gyrraedd "Nesaf"
.Range(ICell).Cliriwch 'Zap ICell yn barod ar gyfer y cyfrifiad nesaf
.Range(ICell).ColumnWidth = 8.1 'Tacluso lled colofn
Diwedd Gyda
Gorffennwch Os
Gorffennwch Os
Digwyddiadau
Digwyddiadau

'Ailosod lled colofn gan dynnu 4% wedi'i ychwanegu (angen gwella gwall lapio)
Ystod ("A" & LastRow + 1). Dewiswch
Ar gyfer C1 = 1 I'r Golofn Olaf
ActiveCell.ColumnWidth = 'ActiveCell.ColumnWidth/Tweak' lleihau lled colofn i'r gwreiddiol
ActiveCell.Offset(0, 1).Range("A1"). Dewiswch ' un gell ar y dde
Digwyddiadau
Ystod ("A1"). Dewiswch

Application.ScreenUpdating = Gwir 'newid diweddaru yn ôl ymlaen
Is Allanfa

TomsHandler:
Application.ScreenUpdating = Gwir 'newid diweddaru yn ôl ymlaen
TwN = Cyfeiliornad.Rhif
TwD = Err.Description
msgstr "Angen trin gwall " &TwN&" " &TwD
Stop
Ail-ddechrau
Is-End

A yw'n bosibl atal Excel rhag newid ymddangosiad sgrin arddangos wrth gau / ailagor y llyfr gwaith?
Ni wnaed unrhyw atebion i'r swydd hon eto.