5

PDF ファイルから表をコピーして Excel に保存するマクロを実行します。一部のテーブルには空のセルが含まれており、私の分析では、空のセルの数を知る必要があります。各列を反復処理して、そのセル内の値が数値かどうかを確認する関数があります。問題は、空のセルでこの関数を実行すると true が返されることです。Isblank() 関数を使用して手動でセルをチークしようとしたところ、「false」が返されました。(貼り付けた範囲外のセルでこれを試すと、「true」が返されます)

PDFからコピーして貼り付けると、空のセルに何らかの値が貼り付けられると思います。

誰かが同様の問題に遭遇したことがありますか?もしそうなら、それを解決する方法についてのアイデアはありますか?

それが助けになる場合は、ここにコピーして貼り付けるために使用するコードがあります

'Initialize Acrobat by creating App object
Set PDFApp = CreateObject("AcroExch.App")

'Set AVDoc object
Set PDFDoc = CreateObject("AcroExch.AVDoc")

'Open the PDF
If PDFDoc.Open(PDFPath, "") = True Then
    PDFDoc.BringToFront

    'Maximize the document
    Call PDFDoc.Maximize(True)

    Set PDFPageView = PDFDoc.GetAVPageView()

    'Go to the desired page
    'The first page is 0
    Call PDFPageView.GoTo(DisplayPage - 1)

    '-------------
    'ZOOM options
    '-------------
    '0 = AVZoomNoVary
    '1 = AVZoomFitPage
    '2 = AVZoomFitWidth
    '3 = AVZoomFitHeight
    '4 = AVZoomFitVisibleWidth
    '5 = AVZoomPreferred

    'Set the page view of the pdf
    Call PDFPageView.ZoomTo(2, 50)

End If

Set PDFApp = Nothing
Set PDFDoc = Nothing

On Error Resume Next

'Show the adobe application
PDFApp.Show

'Set the focus to adobe acrobat pro
AppActivate "Adobe Acrobat Pro"

'Select All Data In The PDF File's Active Page
SendKeys ("^a"), True

'Right-Click Mouse
SendKeys ("+{F10}"), True

'Copy Data As Table
SendKeys ("c"), True

'Minimize Adobe Window
SendKeys ("%n"), True

'Select Next Paste Cell
Range("A" & Range("A1").SpecialCells(xlLastCell).Row).Select
'Cells(1, 1).Select
'Paste Data In This Workbook's Worksheet
ActiveSheet.Paste
4

3 に答える 3

5

を使わずにセル内の文字の長さをチェックした方が良い場合isNumeric()や、エラーチェックなどを行う場合があります...

たとえば、以下のコードを試してください

アクティブなワークシートで使用される Range を確立し、各セルの長さ (len()) を確認して繰り返します

VBEで Immediate Window CTRL+Gを見て、どのセル アドレスが空である かを確認するか 、マクロの実行が終了するまで待つと、範囲内に空のセルがいくつあるかを示すメッセージ ボックスが表示されます。

Option Explicit

Sub CheckForEmptyCells()

    Dim lastCol As Range
    Set lastCol = ActiveSheet.Cells.Find(What:="*", After:=ActiveSheet.Cells(1, 1), LookIn:=xlFormulas, _
              LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)

    Dim rng As Range
    Set rng = Range("A1:" & lastCol.Address)

    Dim cnt As Long
    cnt = 0

    Dim cell As Range
    For Each cell In rng
        If Len(cell) < 1 Then
            Debug.Print cell.Address
            cnt = cnt + 1
        End If
    Next

    MsgBox "there are " & cnt & " empty cells within the range " & rng.Address
End Sub

終了した

于 2013-08-14T07:50:22.077 に答える
2

私は今(PDFファイルをまったく含まずに)空のセルでそれをチェックしました、そしてあなたは正しいです:空のセルをIsNumeric返します。True

コーディング時に、組み込み関数を「限界まで」持ち込まないつもりなので、この問題はこれまでにありませんでした (空のセルを数値と見なすことができるかどうかを判断することは、議論の価値があるかもしれません)。セル (または一般的な文字列) に対して何らかの分析を実行する前に、私が常に行っていることは、セルが空でないことを確認することです。

Dim valIsNumeric As Boolean
If (Not IsEmpty(Range("A1"))) Then
    valIsNumeric = IsNumeric(Range("A1"))
End If

または、より一般的なバージョン (あらゆる状況下であらゆる種類の文字列で高い信頼性):

If (Len(Trim(Range("A1").Value))) Then
    valIsNumeric = IsNumeric(Range("A1"))
End If

指定されたセル/文字列が空白でないことを確認することは、コードのほんの一部を表し、あらゆるアプローチの信頼性を大幅に向上させます。

于 2013-08-14T07:50:13.443 に答える