Pazar, 08 Ekim 2017
  0 Cevaplar
  3.2K Ziyaret
400'den fazla satır, 8 sütun ve 160 birleştirilmiş aralık içeren bir çalışma kitabında bir çalışma sayfam var ve görünümünü bozdum. İnternette VBA Autofit Merged Cells için arama yaptım. URL'lerin hiçbiri pek kullanılmaz. Bu web sitesindeki makro doğru yolda ancak: -
1) 160 birleştirilmiş aralığı manuel olarak tanımlamam ve yazmam gerekir.
Birleştirilmiş hücre aralıkları için bir arama ekledim.
2) Birleştirilmiş hücre hesaplamaları yapmak için birinci satırı kullanır (Hücre ZZ1). A1 (Başlık) hücresinde çok daha büyük bir yazı tipi kullanıyorum, bu da gerekli birleştirilmiş otomatik sığdırma yüksekliğini hesaplarken hatalara neden oluyor.
Verilerin 1 sütun sağında ve 1 satır altında bir hücre kullanıyorum. (Ctrl+Shift+End, bu hücreyi bulamıyor)
3) Birleştirilmiş tüm hücreleri yeniden hesaplar, böylece hem birleştirilmiş hem de normal hücreleri içeren iki satırın yüksekliğini azaltır ve normal hücreleri okunamaz hale getirir.
Satır yüksekliğini yalnızca gerekli birleştirilmiş yükseklik mevcut yüksekliği aştığında değiştiririm.
4) Birleştirilmiş aralıklardaki verileri ZZ1 hücresine kopyalama yöntemi yanlıştır, yalnızca birleştirilmiş aralıktaki metne dayalıdır, ancak birleştirilmiş çeşitli hücrelerdeki farklı yazı tipi boyutlarını hesaba katmaz.
Kopyalama yöntemini düzelttim.
5) Makro yavaş: çalışma sayfamda yaklaşık 15+ saniye.
Makronun sonunda ekran yenilemeyi kapatıp tekrar açmak bu süreyi 2 saniyeye düşürür.

Başka bir rahatsız edici hata bulmayı başardım. Çalışma sayfasını otomatik olarak sığdırın (birleştirilmiş aralıkları düzeltmeden önce) ve birkaç satırı bozdu. Sarılmış olarak ayarlanmış bazı "Normal" hücrelerin yükseklikleri arttı ve metnin altında boş bir satır bulunan bir metin satırı (veya iki satır) olarak görünüyorlardı. İnternet araması, Excel'in ekranı yazıcı yazı tiplerine uyacak şekilde değiştirmesinden kaynaklandığını gösterdi. Bir "çözüm" buldum, makroya ekledim:
Sütun genişliklerini küçük bir yüzdeyle artırın.
Çalışma sayfasındaki tüm satırları otomatik olarak sığdır.
Birleştirilmiş aralıklara uyum sağlamak için satır yüksekliğinde düzeltmeler yapın.
Sütun genişliğini orijinal boyutlara döndürün.
Bu onu düzeltti, artık boş satırlar görünmüyor!

Artık her şeyin doğru olduğunu düşündüm ama sonra başka bir sorun keşfettim. Çalışma kitabını kapatıp yeniden açarsam, boş satırlar tekrar geri gelir. Dosya/Seçeneklere baktım ve çalışma kitabını başarılı bir şekilde kapatırken/açarken çalışma kitabının ekran görüntüsünü güncellemesini önlemenin bir yöntemi için İnternet'te arama yaptım. Çalışma kitabı açıldığında Makroyu çalıştırmak için bir çağrı ile “ThisWorkbook” sekmesine Private Sub Workbook_Open() eklemek zorunda kaldım.


Seçenek Açıkça

Alt Look4Merged()
Dim WSN As String 'Çalışma Sayfası Adı
Dim sht As Çalışma Sayfası 'Set' Tarafından Kullanılır
LastRow As Long 'Veri içeren tüm sütunlardaki son satır Dim
Dim LastRowCC As Long 'Geçerli sütundaki verilerle son satır
Dim LastColumn As Integer 'Veri içeren tüm satırlardaki son sütun sayısı
Dim CurrCol As Integer 'Geçerli sütun sayısı
Dim Letter As String 'CurrCol numarasını dizeye dönüştür
Dim ILetter As String 'Son Sütunun sağındaki dizin sütunu
Dim ICell As String 'Bir sütun sağa ve bir satır aşağı frpm veri alanı hücre. Gerekli birleştirilmiş yüksekliği hesaplamak için kullanılır
Dim CRow As Long 'Mevcut Satır Numarası
Dim TwN As Long 'Hata işleme
Dim TwD As String 'Hata işleme
Dim Mgd As Boolean 'Hücre birleştirilirse Doğru/Yanlış testi
Dim MgdCellAddr As String 'Birleştirilmiş aralığı bir dize olarak içerir
Dim MgdCellStart As String 'Birleştirilmiş Hücre aralığının başlangıç ​​harfi Kullanılan örneğin, birleştirilmiş hücreler için Sütun B'yi incelerken, Sütun A'dan başlayarak sütun B'ye kadar uzanan birleştirilmiş hücreleri yok sayın (zaten değerlendirildi)
Dim MgdCellStart1 As String 'MgdCellStart'ı hesaplamak için kullanılır
Dim MgdCellStart2 As String 'MgdCellStart'ı hesaplamak için kullanılır
Dim OldHeight As Single 'Birleştirilmiş aralıktaki tüm satırların mevcut yüksekliği
Dim P1 As Integer 'Döngü sayısı/işaretçisi
Dim OldWidth As Single 'Birleştirilmiş aralıktaki hücrelerin mevcut genişliği
Dim NewHeight As Single 'Birleştirilmiş aralıktaki tüm satırların gerekli yüksekliği. OldHeight'ı aşarsa, tek tek satırları orantılı olarak güncelleyin
Dim C1 As Integer 'Döngü Sütun sayısı
Dim R1 As Long 'Loop Satır sayısı/işaretçisi
Dim Tweak As Single 'Boş satır sorununun üstesinden gelmek için sütun genişliğinde küçük artış
Aralık Olarak Dim veya Aralık
Hatada TomsHandler'a Git

Application.ScreenUpdating = False 'Ekran güncellenirse 15 saniye çok daha hızlı sadece 2 saniye kapatılır.
Tweak = 1.04 'Tüm satırları Otomatik Sığdır'dan önce sütun genişliğini %4 artır.
WSN = EtkinSayfa.Adı
Columns("A:A").EntireRow.Hidden = False

'Verilerle Çalışma Sayfasının tamamında Son Etkin Satırı ve Sütunu Bul
ActiveSheet.UsedRange ile
LastColumn = Aralık(Range("A1")), Cells(Rows.Count, Columns.Count)).Find(What:="*", LookIn:=xlValues, _
SearchOrder:=xlByColumns, SearchDirection:=xlÖnceki).Column
LastRow = Aralık(Range("A1")), Cells(Rows.Count, Columns.Count)).Find(What:="*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlÖnceki).Satır
İle bitmek
CurrCol = LastColumn + 1 'yani son sütunun sağında
CurrCol < 27 ise
ILetter = Chr$(CurrCol + 64) 'Dizin Sütunu
başka
IHarf = Chr$(Int((CurrCol - 1) / 26) + 64)
ILetter = ILetter & Chr$(CurrCol - Int((CurrCol - 1) / 26) * 26 + 64) 'İndex Column eğer çift haneliyse.üçlü harfle uğraşmadı
Eğer son

'Icell verilerin sağında ve altında bulunur. Hücre, birleştirilmiş aralığa uyması için gereken yüksekliği hesaplamak için kullanılır
ICell = IHarf & LastRow + 1

'Boş satır sarma hatasını gidermek için sütun genişliğini az miktarda artırın.
Aralık("A" & LastRow + 1).Seç
C1 için = 1'den LastColumn'a
ActiveCell.ColumnWidth = ActiveCell.ColumnWidth * Hatayı gidermek için sütun genişliğini az miktarda artırın
ActiveCell.Offset(0, 1).Range("A1").Seçin ' bir hücre sağa taşı
Sonraki

'Otomatik Sığdırma Satırları (birleştirilmiş satırları yok sayar), bazı sarma satırlarında boş satır hatasını önlemek için sütun genişliği %4 ekstra
Cells.Select
Seçim.Satırlar.Otomatik Sığdır
Set sht = Çalışma Sayfaları(WSN) 'veri içeren sütundaki Son girişi bulmak için gerekli

CurrCol için = 1'den LastColumn'a
'geçerli sütun numarasını alfaya dönüştür (tek veya çift harf)
CurrCol < 27 ise
Harf = Chr$(CurrCol + 64)
başka
Harf = Chr$(Int((CurrCol - 1) / 26) + 64)
Harf = Harf & Chr$(CurrCol - Int((CurrCol - 1) / 26) * 26 + 64)
Eğer son
LastRowCC = sht.Cells(sht.Rows.Count, Letter).End(xlUp).Row 'geçerli sütundaki son satırı bul

CRow için = 1'den LastRowCC'ye
Aralık(Harf ve Crow).Seç
Mgd = ActiveCell.MergeCells 'Hücre birleştirilmiş aralıkta mı?
Mgd = Doğru ise, 'Doğruysa, o zaman
'Birleştirilmiş aralık adresi nedir? aralığın başlangıcı için tek/çift haneyi çıkar
MgdCellAddr = ActiveCell.MergeArea.Address
MgdCellStart1 = Orta(MgdCellAddr, 2, 1)
MgdCellStart2 = Orta(MgdCellAddr, 3, 1)
MgdCellStart2 = "$" ise
MgdCellStart = MgdCellStart1
başka
MgdCellStart = MgdCellStart1 ve MgdCellStart2
Eğer son
MgdCellStart = Harf ise 'Birleştirilmiş hücrenin ilk sütunu geçerli sütuna eşit mi?
Sayfalı (WSN)
Eski Genişlik = 0
Set oRange = Range(MgdCellAddr) ' oRange'ı Birleştirilmiş Aralık olarak ayarla algılandı
C1 = 1 için oRange.Columns.Count
OldWidth = OldWidth + .Cells(1, oRange.Column + C1 - 1).ColumnWidth 'Hücre aralığı için sütun genişliklerini toplayın (%4 eklenmiş olarak)
Sonraki
Eski Yükseklik = 0
R1 = 1 için oRange.Rows.Count
OldHeight = OldHeight + .Cells(CRow, oRange.Row + R1 - 1).RowHeight 'Hücre aralığı için mevcut satır yüksekliğini toplayın
Sonraki
oRange.MergeCells = Yanlış
.Range(Letter & CRow).Copy Destination:=Range(ICell) 'Metni VE yazı tipi boyutunu kopyalar, yalnızca değerleri değil
.Range(ICell).WrapText = True 'wrap ICell
.Columns(ILetter).ColumnWidth = OldWidth 'mevcut aralığı taklit etmek için ICell içeren sütunun genişliğini değiştirin
.Rows(LastRow + 1).EntireRow.AutoFit 'ICell satırını otomatik sığdır, gerekli birleştirilmiş yüksekliği ölçmeye hazır
oRange.MergeCells = True 'Birleştirilmiş Aralığı tekrar birleştirilmişe sıfırla
oRange.WrapText = True 've kaydırma
'Birleştirilmiş aralık için gerekli yüksekliği ölçün
NewHeight = .Rows(LastRow + 1).RowHeight
'Yeni gerekli yükseklik Eski mevcut yüksekliği aşıyor mu?
NewHeight > OldHeight ise
R1 için = CRow'dan CRow'a + oRange.Rows.Count - 1
'Aralıktaki her satırı orantılı olarak artırın
Range(ILetter & R1).RowHeight = Range(ILetter & R1).RowHeight * NewHeight / OldHeight
Sonraki
başka
'birleştirilmiş hücrede yeterli oda
Eğer son
CRow = CRow + oRange.Rows.Count - 1 'çok satırlı aralıkta, aralığın 2. satırına düşer ve "Sonraki" ye ulaşıldığında hesaplamayı tekrarlar
.Range(ICell).Clear 'Zap ICell sonraki hesaplama için hazır
.Range(ICell).ColumnWidth = 8.1 'Sütun genişliğini toparla
İle bitmek
Eğer son
Eğer son
Sonraki
Sonraki

'Sütun genişliğini sıfırlayarak %4 eklendi (sarma hatasını düzeltmek için gerekli)
Aralık("A" & LastRow + 1).Seç
C1 için = 1'den LastColumn'a
ActiveCell.ColumnWidth = ActiveCell.ColumnWidth / Tweak 'sütun genişliğini orijinale indir
ActiveCell.Offset(0, 1).Range("A1").Bir hücre sağı seçin
Sonraki
Aralık("A1").Seçin

Application.ScreenUpdating = True 'güncellemeyi tekrar aç
Exit Sub

Tom'un İşleyicisi:
Application.ScreenUpdating = True 'güncellemeyi tekrar aç
TwN = Hata Numarası
TwD = Err.Açıklama
MsgBox "Hatanın işlenmesi gerekiyor" & TwN & " " & TwD
dur
Devam et
End Sub

Çalışma kitabını kapatırken/yeniden açarken Excel'in ekran görüntüsünü değiştirmesini önlemek mümkün müdür?
Bu gönderi için henüz cevap yok.