2016-04-06 25 views
0

Bunu muhtemelen erişim veya VB'de yapmalıyım, ama nasıl kullanacağımı bilmiyorum. Şu anda, formumun sonunda, çalışma kitabını belirli bir hücreye girilen şey olarak kaydedip kapatan bir gönderme düğmem var.Excel Makro Kaydetmek için

Aynı şeyi yapabilmem için bir yol arıyorum, ancak çalışma sayfasını çalışma kitabından ayırın. Bu nedenle, çalışma sayfasını kendi excel dosyası olarak ve belirli bir hücreye girilen adla kaydeder. Aşağıda kullanmakta olduğum makro.

Sub Saveworkbook() 
Application.DisplayAlerts = False 
Dim dName$, vName$ 
    dName = Range("B8") 
    vName = ActiveWorkbook.FullName 
    ActiveWorkbook.SaveAs "W:\Test\" & dName 
    ActiveWorkbook.SaveAs vName 
    ActiveWorkbook.Close 
Application.DisplayAlerts = True 
End Sub 

o isim önemli değil ama kazanmak için tarih ve bilgisayarların kullanıcı eklemek durumunda da serin olurdu. peşin

Teşekkür Sam böyle

+0

Sadece etkin çalışma sayfasını kaldırmak ve kaydetmek ister misiniz? – TsTeaTime

+0

Mümkünse Evet – ShizukaNaHaji

cevap

2

geçerli sürümünde oluşturulan tüm değişiklikleri kurtaracak Bu kod, o zaman yeni bir çalışma kitabı olarak sadece Aktif Sheet kurtaracak kullanıcı adı ve tarihi ile (@ @ Ortam Değişkenleri için Kredi).

Sub Saveworkbook() 
Application.DisplayAlerts = False 
Dim Sheet1 As Worksheet 
Dim dName$, vName$, sName$ 
    dName = Range("B8") 
    vName = ActiveWorkbook.FullName 
    sName = ActiveWorkbook.ActiveSheet.Name 
    For Each Sheet1 In ActiveWorkbook.Sheets 
    If Not Sheet1.Name = sName Then 
    Sheet1.Delete 
    End If 
    Next Sheet1 

    ActiveWorkbook.SaveAs "W:\Test\" & dName & "_" & Environ("username") & "_" & Format(Now, "ddmmyy") & "xlsx" 
    ActiveWorkbook.Close 
Application.DisplayAlerts = True 
End Sub 
+0

Sadece bir soru. İlk formu kaydetmeyi durdurmanın bir yolu var mı? Verileri kaydedip fille dout sayfasını dışa aktarıyor gibi görünüyor, ancak formu tekrar açtığımda tüm veriler hala son girişten geliyor. Teşekkürler – ShizukaNaHaji

+1

İlk formu kaydetmemesi için onu düzelttim. – TsTeaTime

3

şey -

Sub SaveSheet() 

Dim wbkDashboard As Workbook 
Dim wsTarget As Worksheet 
Set wsTarget = Thisworkbook.worksheets("Sheet1") 

Dim strFileName As String 
strFileName = wsTarget.Range("B8").Value _ 
    & Format(Now, "ddmmyyyy") & "-" & Environ("username") & ".xlsx" 

Set wbkDashboard = Workbooks.Add 
wsTarget .Copy Before:=wbkDashboard.Sheets(1) 

For intSheetCount = 2 To wbkDashboard.Sheets.Count 
    wbkDashboard.Sheets(2).Delete 
Next 

wbkDashboard.SaveAs "W:\Test\" & wsTarget.Range("B8").Value _ 
    & Format(Now, "ddmmyyyy") & "-" & Environ("username") & ".xlsx" 

wbkDashboard.Close 
wsTarget.Range("B8").Value= strFileName 

Set wsTarget = Nothing 
Set wbkDashboard = Nothing 
End Sub 
+0

Teşekkür ederim ama aşağıdaki hatayı alıyorum: Çalışma zamanı hatası '9': Abonelik aralık dışı – ShizukaNaHaji

+0

ThisWorkbook.Sheets ("Sheet1") Application.ActiveSheet için değiştirmek isteyebilirsiniz, yalnızca kontrol etmek için dosya kaydetme adındaki aralıktaki değeri ("B8") çok mu istediniz? Range ("B8") değerini değiştirmek isteyebilir.Uygulama Değeri.ActiveSheet.Range ("B8"). Değer - – Will

+0

kodunda yansıtacak şekilde değiştirildi, bu işe yaradı, ancak dosya # 060416-kullanıcı adı olarak kaydedildi. iyi ama B8 hücresindeki metnin de bu isimde olmasını isterdim. o zaman o kurtardı dosya açıldığında boştu ve sheet1 (2) – ShizukaNaHaji