Minggu, 08 Oktober 2017
  0 Balasan
  3.2K Kunjungan
0
Suara
membuka
Saya memiliki lembar kerja di buku kerja yang berisi lebih dari 400 baris, 8 kolom, dan 160 rentang gabungan dan saya mengacaukan penampilannya. Saya mencari di internet untuk VBA Autofit Merged Cells. Tak satu pun dari URL yang banyak digunakan. Makro di situs web ini berada di jalur yang benar tetapi: -
1) Saya harus mengidentifikasi dan mengetikkan 160 rentang gabungan secara manual.
Saya menambahkan pencarian untuk rentang sel gabungan.
2) Menggunakan baris satu untuk melakukan perhitungan sel gabungan (Sel ZZ1). Saya menggunakan font yang jauh lebih besar pada sel A1 (Judul) yang menghasilkan kesalahan dalam menghitung tinggi pas otomatis gabungan yang diperlukan.
Saya menggunakan sel 1 kolom kanan dan 1 baris di bawah data. (Ctrl+Shift+End, tidak menemukan sel ini)
3) Ini menghitung ulang semua sel yang digabungkan sehingga mengurangi ketinggian dua baris yang berisi sel gabungan dan sel normal membuat sel normal tidak dapat dibaca.
Saya mengubah tinggi baris hanya ketika tinggi gabungan yang diperlukan melebihi tinggi yang ada.
4) Metode untuk menyalin data dalam rentang gabungan ke sel ZZ1 salah, hanya berdasarkan teks dalam rentang gabungan tetapi tidak memperhitungkan perbedaan ukuran font di berbagai sel gabungan.
Saya memperbaiki metode penyalinan.
5) Makro lambat: sekitar 15+ detik di lembar kerja saya.
Menonaktifkan penyegaran layar dan mengaktifkannya kembali di akhir makro akan menguranginya menjadi 2 detik.

Saya berhasil menemukan kesalahan menjengkelkan lainnya. Paskan otomatis lembar kerja (sebelum mengoreksi rentang gabungan) dan itu mendistorsi beberapa baris. Beberapa sel "Normal", diatur untuk dibungkus, tingginya bertambah dan muncul sebagai satu baris (atau dua baris) teks dengan baris kosong di bawah teks. Pencarian internet menunjukkan bahwa itu disebabkan oleh Excel mengubah tampilan untuk mengakomodasi font printer. Menemukan "penyelesaian", saya menambahkan ke makro:
Tingkatkan lebar kolom dengan persentase kecil.
Paskan otomatis semua baris pada lembar kerja.
Lakukan koreksi pada tinggi baris untuk mengakomodasi rentang gabungan.
Kembalikan lebar kolom ke ukuran aslinya.
Itu memperbaikinya, baris kosong sekarang tidak lagi muncul!

Berpikir bahwa semuanya sekarang benar tetapi saya kemudian menemukan masalah lebih lanjut. Jika saya menutup buku kerja dan membukanya kembali, baris kosong akan kembali lagi. Melihat File/Opsi dan saya telah mencari di Internet untuk metode mencegah buku kerja memperbarui tampilan layar saat menutup/membuka buku kerja tanpa hasil. Saya harus menambahkan Private Sub Workbook_Open() pada tab "ThisWorkbook" dengan panggilan untuk menjalankan Makro saat buku kerja dibuka.


Opsi Eksplisit

Sub Tampilan4Digabung()
Redupkan WSN Sebagai String 'Nama Lembar Kerja
Dim sht Sebagai Lembar Kerja 'Digunakan oleh "Set"
Dim LastRow As Long 'Baris terakhir di semua kolom dengan data
Redupkan LastRowCC As Long 'Baris terakhir di kolom saat ini dengan data
Dim LastColumn As Integer 'Jumlah kolom terakhir di semua baris dengan data
Redupkan CurrCol Sebagai Integer 'Jumlah kolom saat ini
Dim Letter As String 'Konversikan angka CurrCol ke string
Redupkan ILetter As String 'Indeks kolom satu di sebelah kanan Kolom Terakhir
Dim ICell As String 'Sel satu kolom ke kanan & satu baris ke bawah dari area data frpm. Digunakan untuk menghitung tinggi gabungan yang diperlukan
Redupkan Gagak Selama 'Nomor Baris Saat Ini
Redupkan TwN Selama 'Penanganan kesalahan
Redupkan TwD Sebagai String 'Penanganan kesalahan
Dim Mgd As Boolean 'Tes Benar/Salah jika sel digabungkan
Dim MgdCellAddr As String 'Berisi rentang gabungan sebagai string
Dim MgdCellStart As String 'Surat awal gabungan Rentang sel Digunakan misalnya memeriksa Kolom B untuk sel gabungan, abaikan sel gabungan yang dimulai dari Kolom A meluas ke kolom B (sudah dinilai)
Redupkan MgdCellStart1 Sebagai String 'digunakan untuk menghitung MgdCellStart
Redupkan MgdCellStart2 Sebagai String 'digunakan untuk menghitung MgdCellStart
Redupkan OldHeight As Single 'Ketinggian yang ada dari semua baris dalam rentang gabungan
Redupkan P1 Sebagai Integer 'Loop count/pointer
Dim OldWidth As Single 'Lebar sel yang ada dalam rentang gabungan
Redupkan NewHeight As Single 'Tinggi yang diperlukan untuk semua baris dalam rentang gabungan. Perbarui setiap baris secara proporsional jika melebihi OldHeight
Redupkan C1 Sebagai Integer 'Jumlah Kolom Loop
Redupkan R1 Selama 'Loop Row count/pointer
Dim Tweak As Single 'Peningkatan kecil pada lebar kolom untuk mengatasi masalah baris kosong
Redup oRange As Range
Pada Kesalahan GoTo TomsHandler

Application.ScreenUpdating = False 'JAUH lebih cepat 15 detik jika layar diperbarui hanya 2 detik dimatikan.
Tweak = 1.04 'Tingkatkan lebar kolom sebesar 4% sebelum Autofit semua baris.
WSN = LembarAktif.Nama
Columns("A:A").EntireRow.Hidden = False

'Temukan Baris & Kolom Aktif Terakhir di seluruh Lembar Kerja dengan Data
Dengan ActiveSheet.UsedRange
LastColumn = Range(Range("A1"), Cells(Rows.Count, Columns.Count)).Temukan(What:="*", LookIn:=xlValues, _
SearchOrder:=xlByColumns, SearchDirection:=xlSebelumnya).Column
Baris Terakhir = Range(Range("A1"), Cells(Rows.Count, Columns.Count)).Temukan(What:="*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlSebelumnya).Baris
Berakhir dengan
CurrCol = LastColumn + 1 'yaitu di sebelah kanan kolom terakhir
Jika CurrCol < 27 Maka
ILetter = Chr$(CurrCol + 64) 'Kolom Indeks
Lain
ISurat = Chr$(Int((CurrCol - 1) / 26) + 64)
ILetter = ILetter & Chr$(CurrCol - Int((CurrCol - 1) / 26) * 26 + 64) 'Kolom Indeks jika dua digit.tidak terganggu dengan huruf tiga
End If

'Icell terletak tepat di bawah data. Sel digunakan untuk menghitung tinggi yang diperlukan agar sesuai dengan rentang gabungan
ICell = ILetter & LastRow + 1

'Tingkatkan lebar kolom dengan jumlah kecil untuk menyembuhkan bug pembungkus baris kosong.
Rentang("A" & Baris Terakhir + 1).Pilih
Untuk C1 = 1 Sampai Kolom Terakhir
ActiveCell.ColumnWidth = ActiveCell.ColumnWidth * Tweak 'menambah lebar kolom dengan jumlah kecil untuk menyembuhkan bug
ActiveCell.Offset(0, 1).Range("A1").Pilih ' pindah satu sel ke kanan
Selanjutnya

'Autofit Rows (mengabaikan baris yang digabungkan) dengan lebar kolom ekstra 4% untuk mencegah bug baris kosong pada beberapa Baris pembungkus
Sel. Pilih
Seleksi. Baris. AutoFit
Set sht = Worksheets(WSN) 'diperlukan untuk menemukan Entri terakhir di kolom dengan data

Untuk CurrCol = 1 Sampai Kolom Terakhir
'konversi nomor kolom saat ini ke alfa (baik huruf tunggal atau ganda)
Jika CurrCol < 27 Maka
Huruf = Chr$(CurrCol + 64)
Lain
Huruf = Chr$(Int((CurrCol - 1) / 26) + 64)
Huruf = Huruf & Chr$(CurrCol - Int((CurrCol - 1) / 26) * 26 + 64)
End If
LastRowCC = sht.Cells(sht.Rows.Count, Letter).End(xlUp).Row 'temukan baris terakhir di kolom saat ini

Untuk CRow = 1 Untuk LastRowCC
Rentang (Surat & Gagak). Pilih
Mgd = ActiveCell.MergeCells 'Apakah sel dalam rentang gabungan
Jika Mgd = Benar Kemudian 'Jika Benar, maka itu adalah
'Apa alamat rentang gabungan? ekstrak satu / dua digit untuk memulai jangkauan
MgdCellAddr = ActiveCell.MergeArea.Alamat
MgdCellStart1 = Pertengahan(MgdCellAddr, 2, 1)
MgdCellStart2 = Pertengahan(MgdCellAddr, 3, 1)
Jika MgdCellStart2 = "$" Maka
MgdCellStart = MgdCellStart1
Lain
MgdCellStart = MgdCellStart1 & MgdCellStart2
End If
If MgdCellStart = Letter Then 'Apakah kolom pertama sel yang digabungkan sama dengan kolom saat ini
Dengan Lembar (WSN)
Lebar Lama = 0
Setel oRange = Range(MgdCellAddr) 'setel oRange ke Rentang Gabungan terdeteksi
Untuk C1 = 1 Ke oRange.Columns.Count
OldWidth = OldWidth + .Cells(1, oRange.Column + C1 - 1).ColumnWidth 'Akumulasi lebar kolom untuk rentang sel (dengan 4% ditambahkan)
Selanjutnya
Tinggi Tua = 0
Untuk R1 = 1 Ke oRange.Rows.Count
OldHeight = OldHeight + .Cells(CRow, oRange.Row + R1 - 1).RowHeight 'Akumulasi tinggi baris yang ada untuk rentang sel
Selanjutnya
oRange.MergeCells = Salah
.Range(Letter & CRow).Copy Destination:=Range(ICell) 'Menyalin teks DAN ukuran font, bukan hanya nilai
.Range(ICell).WrapText = Benar 'bungkus ICell
.Columns(ILetter).ColumnWidth = OldWidth 'mengubah lebar kolom yang berisi ICell untuk meniru rentang yang ada
.Rows(LastRow + 1).EntireRow.AutoFit 'Autofit baris ICell, siap untuk mengukur tinggi gabungan yang diperlukan
oRange.MergeCells = True 'Setel ulang Rentang gabungan kembali ke gabungan
oRange.WrapText = Benar 'dan pembungkus
'Ukur tinggi yang diperlukan untuk rentang gabungan
Tinggi Baru = .Baris(Baris Terakhir + 1).Tinggi Baris
'Apakah ketinggian yang dibutuhkan Baru melebihi ketinggian lama yang ada?
Jika Tinggi Baru > Tinggi Lama Maka
Untuk R1 = CRow To CRow + oRange.Rows.Count - 1
'Tingkatkan setiap baris dalam rentang pro rata
Range(ILetter & R1).RowHeight = Range(ILetter & R1).RowHeight * NewHeight / OldHeight
Selanjutnya
Lain
'ruangan yang cukup di sel gabungan
End If
CRow = CRow + oRange.Rows.Count - 1 'lain pada rentang multirow, akan turun ke baris ke-2 rentang dan ulangi perhitungan saat tiba di "Berikutnya"
.Range(ICell).Hapus 'Zap ICell siap untuk perhitungan selanjutnya
.Range(ICell).ColumnWidth = 8.1 'Rapikan lebar kolom
Berakhir dengan
End If
End If
Selanjutnya
Selanjutnya

'Reset lebar kolom menghapus 4% ditambahkan (diperlukan untuk menyembuhkan kesalahan bungkus)
Rentang("A" & Baris Terakhir + 1).Pilih
Untuk C1 = 1 Sampai Kolom Terakhir
ActiveCell.ColumnWidth = ActiveCell.ColumnWidth / Tweak 'kurangi lebar kolom ke aslinya
ActiveCell.Offset(0, 1).Range("A1").Pilih ' satu sel ke kanan
Selanjutnya
Rentang("A1").Pilih

Application.ScreenUpdating = Benar 'aktifkan kembali pembaruan
Keluar dari Sub

TomsHandler:
Application.ScreenUpdating = Benar 'aktifkan kembali pembaruan
TwN = Err.Nomor
TwD = Err.Deskripsi
MsgBox "Perlu menangani kesalahan " & TwN & " " & TwD
berhenti
Lanjut
End Sub

Apakah mungkin untuk mencegah Excel mengubah tampilan tampilan layar saat menutup/membuka kembali buku kerja?
Tidak ada balasan yang dibuat untuk posting ini.