By TomWhiteJnr կիրակի, 08 հոկտեմբերի 2017 թ
Ավելացնել Excel
Գրառումներ 0
Սիրում 0
Դիտումներ 3.1K
Քվեարկել 0
Ես աշխատանքային գրքում ունեմ աշխատանքային թերթիկ, որը պարունակում է ավելի քան 400 տող, 8 սյունակ և 160 միավորված տիրույթ, և ես խառնաշփոթ եմ դրա տեսքը: Ես որոնեցի ինտերնետում VBA Autofit Merged Cells-ի համար: URL-ներից ոչ մեկը մեծ կիրառություն չունի: Այս կայքի մակրոն ճիշտ ուղու վրա է, բայց.
1) Ես պետք է ձեռքով նույնականացնեմ և մուտքագրեմ 160 միավորված միջակայքերը:
Ես ավելացրեցի միավորված բջիջների տիրույթների որոնում:
2) Այն օգտագործում է առաջին տողը միավորված բջիջների հաշվարկներ կատարելու համար (Cell ZZ1): Ես օգտագործում եմ շատ ավելի մեծ տառատեսակ A1 բջիջի վրա (վերնագիր), որի արդյունքում սխալներ են առաջանում միաձուլված ինքնահաստատման բարձրությունը հաշվարկելիս:
Ես օգտագործում եմ բջիջ 1 սյունակ աջ և 1 տող տվյալների տակ: (Ctrl+Shift+End, չի գտնում այս բջիջը)
3) Այն վերահաշվարկում է բոլոր միաձուլված բջիջները, ուստի նվազեցնում է երկու տողերի բարձրությունը, որոնք պարունակում են և՛ միաձուլված, և՛ նորմալ բջիջներ՝ դարձնելով նորմալ բջիջները անընթեռնելի:
Ես փոխում եմ տողի բարձրությունը միայն այն դեպքում, երբ պահանջվող միաձուլված բարձրությունը գերազանցում է գոյություն ունեցող բարձրությունը:
4) Միաձուլված տիրույթներում տվյալների ZZ1 բջիջում պատճենելու մեթոդը սխալ է, որը հիմնված է միայն միացված տիրույթի տեքստի վրա, բայց հաշվի չի առնում տարբեր միաձուլված բջիջներում տառատեսակների տարբեր չափերը:
Ես ուղղել եմ պատճենահանման եղանակը։
5) Մակրոն դանդաղ է. մոտ 15+ վայրկյան իմ աշխատաթերթում:
Էկրանի թարմացումն անջատելը և մակրոյի վերջում նորից միացնելը նվազեցնում է այն մինչև 2 վայրկյան:

Ինձ հաջողվեց գտնել ևս մեկ նյարդայնացնող թերություն. Աշխատանքային թերթի ավտոմատ տեղադրում (մինչև միաձուլված միջակայքերը ուղղելը) և այն աղավաղեց մի քանի տող: Որոշ «Նորմալ» բջիջներ, որոնք դրված էին փաթաթվածի վրա, բարձրացան և հայտնվում էին որպես տեքստի տող (կամ երկու տող), տեքստի տակ դատարկ տողով: Ինտերնետում որոնումը ցույց է տվել, որ դա պայմանավորված է Excel-ի էկրանի փոփոխմամբ՝ տպիչի տառատեսակները տեղավորելու համար: Գտա «աշխատանք», ես ավելացրեցի մակրոյին.
Բարձրացրեք սյունակների լայնությունը փոքր տոկոսով:
Աշխատանքային թերթի բոլոր տողերի ավտոմատ տեղադրումը:
Կատարեք ուղղումներ տողի բարձրության վրա՝ միավորված միջակայքերը հարմարեցնելու համար:
Վերադարձեք սյունակի լայնությունը սկզբնական չափերին։
Դա ուղղվեց, դատարկ տողերն այլևս չեն երևում:

Մտածեցի, որ այժմ ամեն ինչ ճիշտ է, բայց հետո հայտնաբերեցի ևս մեկ խնդիր: Եթե ​​փակեմ աշխատանքային գրքույկը և նորից բացեմ այն, դատարկ տողերը նորից կվերադառնան: Նայեցի Ֆայլը/Ընտրանքներին և ինտերնետում փնտրեցի մի մեթոդ, որը թույլ չտա աշխատանքային գրքույկը թարմացնել էկրանի ցուցադրումը աշխատանքային գրքույկը փակելու/բացելու ժամանակ: Ես ստիպված էի ավելացնել Private Sub Workbook_Open() «ThisWorkbook» ներդիրում, որպեսզի աշխատացուցակը բացվի մակրո գործարկելու համար:


Option Explicit- ը

Sub Look4Merged()
Dim WSN As String 'Worksheet Name
Dim sht As Worksheet «Օգտագործվում է «Set»-ի կողմից
Dim LastRow As Long 'Վերջին տողը բոլոր սյունակներում տվյալների հետ
Dim LastRowCC As Long «Վերջին տողը ընթացիկ սյունակում տվյալների հետ
Dim LastColumn As Integer «Վերջին սյունակի թիվը տվյալների հետ բոլոր տողերում
Dim CurrCol As Integer «Ընթացիկ սյունակի թիվը
Dim Letter As String 'Փոխակերպեք CurrCol համարը տողի
Dim ILTerter As String «Ինդեքսի սյունակը վերջին սյունակից մեկ դեպի աջ
Dim ICEll-ը որպես տող «Բջիջ մեկ սյունակ աջ և մեկ տող ներքև frpm տվյալների տարածք: Օգտագործվում է պահանջվող միաձուլված բարձրությունը հաշվարկելու համար
Dim Crow As Long «Ընթացիկ շարքի համարը»:
Dim TwN As Long «Սխալների մշակում
Dim TwD As String «Սխալների մշակում
Dim Mgd Որպես բուլյան «Ճիշտ/Սխալ» թեստ, եթե բջիջը միաձուլված է
Dim MgdCellAddr As String «Պարունակում է միավորված տիրույթը որպես տող
Dim MgdCellStart Որպես տող «Միացված բջիջների տիրույթի մեկնարկային տառը Օգտագործված է, օրինակ՝ ստուգել B սյունակը միացված բջիջների համար, անտեսել A սյունակից սկսվող ցանկացած միավորված բջիջ, որը տարածվում է մինչև B սյունակ (արդեն գնահատված է)
Dim MgdCellStart1 Որպես տող «օգտագործվում է MgdCellStart-ը հաշվարկելու համար
Dim MgdCellStart2 Որպես տող «օգտագործվում է MgdCellStart-ը հաշվարկելու համար
Dim Old Height As Single «Բոլոր տողերի գոյություն ունեցող բարձրությունը միավորված տիրույթում
Dim P1 որպես ամբողջ թիվ «Օղակի հաշվարկ/ցուցիչ
Dim Old Width As Single «Բջիջների գոյություն ունեցող լայնությունը միավորված տիրույթում
Dim New Height As Single «Միացված տիրույթում բոլոր տողերի պահանջվող բարձրությունը: Թարմացրեք առանձին տողերը համաչափ, եթե դրանք գերազանցում են OldHeight-ը
Dim C1 որպես ամբողջ թվով «Loop» սյունակների հաշվարկ
Dim R1 As Long 'Loop տողերի հաշվարկ/ցուցիչ
Dim Tweak As Single «Սյունակի լայնության փոքր աճ՝ դատարկ տողի խնդիրը հաղթահարելու համար
Dim orRange As Range
Սխալի դեպքում GoTo TomsHandler

Application.ScreenUpdating = False 'ՇԱՏ ավելի արագ 15 վայրկյան, եթե էկրանը թարմացվի ընդամենը 2 վայրկյան անջատված:
Tweak = 1.04 'Բոլոր տողերի ավտոմատ տեղադրումից առաջ մեծացրեք սյունակի լայնությունը 4%-ով:
WSN = ActiveSheet.Name
Columns("A:A").EntireRow.Hidden = False

«Գտեք վերջին ակտիվ տողը և սյունակը ամբողջ աշխատաթերթում տվյալների հետ
ActiveSheet.UsedRange-ով
LastColumn = Range(Range("A1"), Cells(Rows.Count, Columns.Count)).Find(What:="*", LookIn:=xlValues, _
SearchOrder:=xlByColumns, SearchDirection:=xlՆախորդ).Սյունակ
LastRow = Range(Range("A1"), Cells(Rows.Count, Columns.Count)).Find(What:="*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlՆախորդ).Տող
Վերջ
CurrCol = LastColumn + 1 'այսինքն վերջին սյունակից աջ
Եթե ​​CurrCol < 27 Ապա
ILEtter = Chr$(CurrCol + 64) 'Ինդեքսի սյունակ
Ուրիշ
ILTer = Chr$(Int((CurrCol - 1) / 26) + 64)
ILEtter = ILEtter & Chr$(CurrCol - Int((CurrCol - 1) / 26) * 26 + 64) 'Ինդեքսի սյունակ, եթե երկնիշ է. չեն անհանգստացրել եռատառով
Վերջ: Եթե

«Icell-ը գտնվում է տվյալների աջ և ներքևում։ Բջիջն օգտագործվում է միաձուլված տիրույթին համապատասխանելու համար պահանջվող բարձրությունը հաշվարկելու համար
ICEll = ILTer & LastRow + 1

«Ավելացրե՛ք սյունակի լայնությունը փոքր քանակությամբ՝ դատարկ տողերի փաթաթման սխալը բուժելու համար:
Range ("A" & LastRow + 1): Ընտրեք
C1 = 1 To LastColumn-ի համար
ActiveCell.ColumnWidth = ActiveCell.ColumnWidth * Կսմթել 'մեծացնել սյունակի լայնությունը փոքր քանակությամբ՝ սխալը բուժելու համար
ActiveCell.Offset(0, 1).Range("A1").Ընտրեք ' տեղափոխեք մեկ բջիջ աջ
հաջորդ

«Ավտոմատիտավորում տողերը (անտեսում է միավորված տողերը) սյունակի լայնությամբ 4% հավելյալ՝ որոշ փաթաթվող տողերի վրա դատարկ տողերի սխալը կանխելու համար
Բջիջներ: Ընտրեք
Selection.Rows.AutoFit
Սահմանել sht = Worksheets(WSN) 'անհրաժեշտ է տվյալների հետ սյունակում վերջին մուտքը գտնելու համար

CurrCol = 1 To LastColumn-ի համար
«փոխակերպել ընթացիկ սյունակի համարը ալֆայի (մեկ կամ երկտառ)
Եթե ​​CurrCol < 27 Ապա
Նամակ = Chr$(CurrCol + 64)
Ուրիշ
Նամակ = Chr$(Int((CurrCol - 1) / 26) + 64)
Նամակ = Նամակ & Chr$(CurrCol - Int((CurrCol - 1) / 26) * 26 + 64)
Վերջ: Եթե
LastRowCC = sht.Cells(sht.Rows.Count, Letter).End(xlUp).Տող 'գտնել վերջին տողը ընթացիկ սյունակում

Crow = 1 To LastRowCC-ի համար
Range (Letter & Crow): Ընտրեք
Mgd = ActiveCell.MergeCells 'Արդյո՞ք բջիջը միավորված տիրույթում է
Եթե ​​Mgd = Ճշմարիտ, ապա «Եթե ճիշտ է, ուրեմն այդպես է
«Ո՞րն է միավորված տիրույթի հասցեն: քաղել մեկ/երկնիշ միջակայքի սկզբի համար
MgdCellAddr = ActiveCell.MergeArea.Address
MgdCellStart1 = Mid(MgdCellAddr, 2, 1)
MgdCellStart2 = Mid(MgdCellAddr, 3, 1)
Եթե ​​MgdCellStart2 = «$» Ապա
MgdCellStart = MgdCellStart1
Ուրիշ
MgdCellStart = MgdCellStart1 & MgdCellStart2
Վերջ: Եթե
Եթե ​​MgdCellStart = Նամակ, ապա «միաձուլված բջիջի առաջին սյունակը հավասար է ընթացիկ սյունակին
Թերթերով (WSN)
Հին լայնություն = 0
Սահմանել oRange = Range(MgdCellAddr) 'սահմանել oRange-ը միավորված տիրույթի հայտնաբերված
C1 = 1-ի համար դեպի oRange.Columns.Count
OldWidth = OldWidth + .Cells(1, oRange.Column + C1 - 1).ColumnWidth 'Կուտակել սյունակների լայնությունները բջիջների տիրույթի համար (4%-ով ավելացված)
հաջորդ
Հին Բարձրություն = 0
R1 = 1-ի համար դեպի oRange.Rows.Count
OldHeight = OldHeight + .Cells (CRow, oRange. Row + R1 - 1). RowHeight 'Կուտակել առկա տողի բարձրությունը բջիջների տիրույթի համար
հաջորդ
oRange.MergeCells = Սխալ
.Range(Letter & Crow).Copy Destination:=Range(ICEll) 'Պատճենում է տեքստը ԵՎ տառատեսակի չափը, ոչ միայն արժեքները
.Range(ICEll).WrapText = True 'wrap ICEll
.Columns(ILetter).ColumnWidth = OldWidth 'փոխել ICE պարունակող սյունակի լայնությունը՝ ընդօրինակելու գոյություն ունեցող տիրույթը
.Rows(LastRow + 1).EntireRow.AutoFit «Ավտոմատուցեք ICE-ի տողը, պատրաստ է չափել պահանջվող միաձուլված բարձրությունը
oRange.MergeCells = True 'Վերականգնել միավորված տիրույթը միաձուլվածի
oRange.WrapText = Ճիշտ է և փաթաթում
«Չափել պահանջվող բարձրությունը միավորված տիրույթի համար
ՆորԲարձրություն = .Տողեր(Վերջին տող + 1).Տողերի բարձրություն
«Նոր պահանջվող բարձրությունը գերազանցո՞ւմ է հին գոյություն ունեցող բարձրությունը
Եթե ​​NewHeight > OldHeight Այնուհետեւ
R1-ի համար = CRow To CRow + oRange.Rows.Count - 1
«Ավելացրե՛ք յուրաքանչյուր տող միջակայքում համաչափ
Շրջանակ (ILetter & R1). RowHeight = Range (ILetter & R1). RowHeight * NewHeight / OldHeight
հաջորդ
Ուրիշ
«բավարար սենյակ միավորված խցում
Վերջ: Եթե
CRow = CRow + oRange.Rows.Count - 1 'այլ կերպ բազմաշարք տիրույթում, կիջնի մինչև տիրույթի 2-րդ շարքը և կկրկնի հաշվարկը, երբ հասնելով «Հաջորդին»:
.Range(ICEll): Մաքրել 'Zap ICEll-ը պատրաստ է հաջորդ հաշվարկին
.Range(ICEll).ColumnWidth = 8.1 'Կարգավորել սյունակի լայնությունը
Վերջ
Վերջ: Եթե
Վերջ: Եթե
հաջորդ
հաջորդ

«Վերականգնել սյունակի լայնությունը՝ հեռացնելով ավելացված 4%-ը (անհրաժեշտ է փաթաթման սխալը բուժելու համար)
Range ("A" & LastRow + 1): Ընտրեք
C1 = 1 To LastColumn-ի համար
ActiveCell.ColumnWidth = ActiveCell.ColumnWidth / Tweak 'նվազեցնել սյունակի լայնությունը բնօրինակի
ActiveCell.Offset(0, 1).Range("A1").Ընտրեք 'մեկ բջիջ աջ
հաջորդ
Շրջանակ («A1»): Ընտրեք

Application.ScreenUpdating = True 'switch թարմացումը նորից միացված է
Ելք ենթ

TomsHandler:
Application.ScreenUpdating = True 'switch թարմացումը նորից միացված է
TwN = Սխալ.Թիվ
TwD = Սխալ.Նկարագրություն
MsgBox «Պետք է կարգավորել սխալը» & TwN & " " & TwD
Դադարեցնել
Ռեզյումե
Վերջ Sub

Հնարավո՞ր է կանխել Excel-ը փոխել էկրանի տեսքը աշխատանքային գրքույկը փակելիս/վերաբացելիս:
Դիտել ամբողջական գրառումը