Excel makrosunu değiştirmek zor kod yerine metin referans listesine


0

Üzerinde çalıştığım bir Excel Makrosunun son adımı ile ilgili yardım almaya çalışıyorum. İki farklı çalışma kitabındaki sayfalardan veri alan bir Makro belirledim ve bunları üçüncü bir çalışma kitabına yapıştıracağım.

Üçüncü çalışma kitabı, her biri farklı bir ad ve numara ile tanımlanan 15 farklı çalışana atfedilen 15 dosyadan biridir.

Macro'yu 15 çalışma kitabının her birini birer birer açıp güncelleyecek ve ayarlayıp sonra da açıp kapatacağım, ancak şimdi 15 listesindeki (çalışanlar istifa ettiğinde veya yeni çalışanlar için) değişiklikler yapmam gerekiyor. işe alın).

Makroyu yazdığım şekilde, el ile koda girip, 15 çalışanın ad ve kimlik numaralarının referansını değiştirmek zorunda kaldım.

Bir listeden isim ve numarayı okuyabilmesi (dördüncü bir çalışma kitabına kaydedilmiş), böylece sadece bu listeyi gerektiği gibi düzenleyebildiğim ve Makro aynı kalacağım ve bir Döngüde çalıştırabilecek şekilde ayarlamanın bir yolu var mı? ? Değişiklik yapmak zorunda olduğum her seferde Değiştir'i kullanabileceğimi biliyorum, ancak tek bir düzenlenebilir listeden çalışmak daha kolay olurdu. Teşekkür ederim.

Aşağıdaki örnekte, Melvin Smith ID # 2878 adlı çalışana referans verilmiştir:

‘ Using the AutoFilter on the workbook called NEW DD    
Windows("NEW DD.xlsx").Activate
    ActiveSheet.Range("$H$1:$H$3055").AutoFilter Field:=8, Criteria1:=”=*Melvin Smith*”, _ Operator:=xlAnd
    Selection.Copy
‘ Going back to Melvin’s workbook named 2878    
Windows("2878.xlsx").Activate
    Sheets("D dd N").Select
    Range("A1").Select
    ActiveSheet.Paste

Genelde "bu sayfayı ziyaret et" demenin genel olarak kötü bir yöntem olduğunu biliyorum, ancak çözüm kodlama diyarında biraz temel bir çözüm. Çalışanların isimlerini ve ilgili numaraları saklamak için değişkenleri beyan etmeniz ve kullanmanız gerekir. Aşağıdaki bağlantıdan başlamanızı, kodu başka bir atış vermenizi ve daha sonra hala sorun yaşıyorsanız geri dönmenizi öneririm. excel-pratique.com/en/vba/variables.php
varyant

15 elektronik tablo nasıl adlandırılır? Bunları çalışanın adı / numarası ile eşleştirmek için yeniden adlandırabilir misiniz? Öyleyse, yeni bir işe girdiğinizde, bulunmazsa, yeni bir tane oluşturabilir. Bu durumda, adı veya numarayı bir değişkene aktarabilir ve bu değişkeni WB
Raystafarian'ı

Yanıtlar:


0

Geçmişte yaptığım yol, aynen dediğiniz gibi yapmak. Değişkenleri başka bir çalışma sayfasında / kitapta saklıyorum.

Diyelim ki şöyle görünen "Employees.xlsx" adlı bir çalışma kitabı oluşturdunuz:

  | A               | B
  |-----------------|--------------------
 1| Employee        | Employee Num
 2| Melvin Smith    | 2878
 3| David Gilmour   | 1908

Ardından, iki alt bölümler yaratırsınız: biri masanızda dolaşıyor, diğeri de kopyalamayı yapıyor. Çalışanın adını ve numarasını ikinci alt gruba aktarırız ve kodlanan değerler yerine bunları kullanır.

Sub CopyAllSheets()

    ' Store a reference to the workbook
    Dim Wb As Workbook
    Set Wb = Workbooks("Employees.xlsx")

    ' Start at row 2 to ignore the column headers
    Dim Counter As Long
    For Counter = 2 To Wb.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
        CopySingleSheet Wb.Sheets(1).Range("A" & Counter), Wb.Sheets(1).Range("B" & Counter)
    Next Counter

End Sub

Sub CopySingleSheet(EmpName As String, EmpNumber As String)

    ' Using the AutoFilter on the workbook called NEW DD
    Windows("NEW DD.xlsx").Activate
    ActiveSheet.Range("$H$1:$H$3055").AutoFilter Field:=8, Criteria1:="=*" & EmpName & "*", Operator:=xlAnd
    Selection.Copy
    ' Going back to Melvin’s workbook named 2878
    Windows(EmpNumber & ".xlsx").Activate
    Sheets("D dd N").Select
    Range("A1").Select
    ActiveSheet.Paste

End Sub

Umarım bu mantıklı


Derleme hatası alıyorum ve hata ayıklayıcı bana ilk Counter değişkeninin tanımlanmadığını söylüyor. Bunun için bir düzenleme biliyor musunuz lütfen? Teşekkür ederim.
NATHAN ARNOLD

Buyrun, bunu deneyin. CounterDeğişkeni ilan etmedim .
user184994

Çok teşekkür ederim! Bu mükemmel çalıştı! Çok müteşekkirim!
NATHAN ARNOLD
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.