2015-12-03 17 views
6

kaydetmekExcel VBA ben ... VBA kodu ile Excel'de bir çalışma sayfası bir ekran görüntüsü almaya çalışın ve sonra belirtilen yolda kaydetmek için, ama düzgün kaydetmek başaramasanız ekran görüntüsü

Sub My_Macro(Test, Path) 
    Dim sSheetName As String 
    Dim oRangeToCopy As Range 
    Dim FirstCell As Range, LastCell As Range 

    Worksheets(Test).Activate 
    Set LastCell = Cells(Cells.Find(What:="*", SearchOrder:=xlRows, _ 
     SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _ 
     Cells.Find(What:="*", SearchOrder:=xlByColumns, _ 
     SearchDirection:=xlPrevious, LookIn:=xlValues).Column) 
    Set FirstCell = Cells(Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlRows, _ 
     SearchDirection:=xlNext, LookIn:=xlValues).Row, _ 
     Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlByColumns, _ 
     SearchDirection:=xlNext, LookIn:=xlValues).Column) 

    sSheetName = Test ' worksheet to work on 

    With Worksheets(sSheetName) 
     .Range(FirstCell, LastCell).CopyPicture xlScreen, xlPicture 
     .Export Filename:=Path + Test + ".jpg", Filtername:="JPG" 
    End With 

End Sub 

Excel, doğrudan ekran görüntüsünü aldıktan sonra .Export yöntemini yürütmek istemiyor. Fotoğrafı yeni bir grafikte yapıştırmaya çalıştım.

... Herhangi bir fikir

+0

O jpg Excel için geçerli bir ihracat biçimi Yani Excel kodda bunu zorlamak ne yapacağını bilmez (el bir Excel sayfası ihraç etmeye çalışırken listesine bakın) olduğunu düşünmüyorum . – Tom

+0

Buradan bakın: http://www.mrexcel.com/forum/excel-questions/233108-visual-basic-applications-code-export-image-file-pre preferably-jpg.html –

cevap

5

Luboš Suk'un fikriyle meşguldü.

Sadece Grafiğin boyutunu değiştirin. Aşağıdaki betiğe bakınız.

Sub My_Macro(Test, Path) 


Test = "UNIT 31" 
    Dim sSheetName As String 
    Dim oRangeToCopy As Range 
    Dim FirstCell As Range, LastCell As Range 

    Worksheets(Test).Activate 

    Set LastCell = Cells(Cells.Find(What:="*", SearchOrder:=xlRows, _ 
     SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _ 
     Cells.Find(What:="*", SearchOrder:=xlByColumns, _ 
     SearchDirection:=xlPrevious, LookIn:=xlValues).Column) 

    Set FirstCell = Cells(Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlRows, _ 
     SearchDirection:=xlNext, LookIn:=xlValues).Row, _ 
     Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlByColumns, _ 
     SearchDirection:=xlNext, LookIn:=xlValues).Column) 

    sSheetName = Test ' worksheet to work on 

    With Worksheets(sSheetName).Range(FirstCell, LastCell) 

     .CopyPicture xlScreen, xlPicture 
     'Getting the Range height 
     PicHeight = .Height 
     'Getting the Range Width 
     PicWidth = .Width 

     ''.Export Filename:=Path + Test + ".jpg", Filtername:="JPG" 'REMOVE THIS LINE 


    End With 


    With Worksheets(sSheetName) 

     'Creating the Chart 
     .ChartObjects.Add(30, 44, PicWidth, PicHeight).Name = "TempChart" 

     With .ChartObjects("TempChart") 

      'Pasting the Image 
      .Chart.Paste 
      'Exporting the Chart 
      .Chart.Export Filename:=Path + Test + ".jpg", Filtername:="JPG" 

     End With 

     .ChartObjects("TempChart").Delete 

    End With 

End Sub 
+0

Teşekkürler çocuklar, tam olarak istediğim gibi çalışıyor. – Rixpuk

2

Excel benim resmi bir grafikle doğru yerde grafik resmi kaydetmek ... Ben de geçici çalışma sayfasında yapıştırmak için çalıştı ama Excel ihraç etmek istemiyor Aylar önce benzer bir şey yapıyordum. Belirli bir aralığın ekran görüntüsünü oluşturmalı ve dosyaya vermem gerekiyordu. Masaya girmeden saatler geçtikten sonra, kullanıcı dostu bana göre .chart.export ile çözüm buldum. Lütfen koduma bir göz atın, ihtiyacınıza göre kolayca güncelleyebileceğinizi düşünüyorum. Basit düşünce, grafik oluşturmak, bir ekran görüntüsü almak için wana'yu yapıştırmak, tabloya resmi dışa aktarmak ve daha sonra kimliği silmek. Basit ve zarif. Bazı sorun Yorumunuza göre

Sub takeScreen() 
    Dim mainSheet As Worksheet 
    Set mainSheet = Sheets("Input-Output") 

    Dim path As String 
    path = Application.ActiveWorkbook.path 

    Application.ScreenUpdating = False 


    If Dir(path & "\figures\", vbDirectory) = "" Then 
     MsgBox "Directory figures not found. Cannot save image." 
     Exit Sub 
    End If 

    With mainSheet 
     .ChartObjects.Add(30, 44, 765, 868).Name = "exportChart" 
     With .ChartObjects("exportChart") 
      .Chart.ChartArea.Border.LineStyle = xlNone 
      .Chart.ChartArea.Fill.Visible = False 
      mainSheet.Range(mainSheet.Cells(4, "B"), mainSheet.Cells(60, "L")).CopyPicture 
      .Chart.Paste 
      .Chart.Export fileName:=path & "\figures\" & "fatigue_summary.png ", FilterName:="png" 
     End With 
     .ChartObjects("exportChart").Delete 
    End With 

    Application.ScreenUpdating = True 

End Sub 

varsa sormaktan çekinmeyin, seni satır/sütun boyutu ve onların sayısından grafik boyutunu hesaplamak düşünüyorum. Ya da hücre konumunu ve boyut özelliklerini kullanarak grafiği yeniden boyutlandırabilirsiniz. (look for .cells().width, .cells().height,.cells().top, .cells().left)

+0

Merhaba Luboš Suk, teşekkür ederim Cevap. Ben de öyle yaptım. Sorun şu ki, grafikteki bir satır veriyi yapıştırdığımda, grafik sonunda büyük bir beyaz alan ve kaydedilen resim de elde ediyorum. Grafiğin ekran görüntüsünün boyutuna yeniden boyutlandırılıp ayarlanamayacağını bilmiyorum .... – Rixpuk

+0

Tam olarak tam olarak emin değilim, ancak kopyaladığınız satırın boyutunu ve satır sayısını biliyorsunuz. Bundan dolayı, büyüklükleri hesaplayabilir ve grafik boyutuna göre değiştirebilirsiniz. –

+0

@ LubošSuk görüntünün boyutunu yapıştırıp kontrol edip silebilirsiniz. Cevabıma bir bak. Bir Shell Uygulamasını kullanmayı ve boyaya yapışmayı da düşündüm ama işe yaramadı, bu yüzden bu kadar uzun süredir aldım –