1

警告: 私は初心者です。

赤いテキストのセルを見つけて変更する Sub を作成しました。

@ThinkerIV は、セルに入れて数式を隣接するセルにドラッグする優れた機能を提供してくれましたが、作業するシートの数が原因で機能しません。そこで、Sub を書き、彼の関数を呼び出しました (以下のコードを参照)。1セルのRangeを渡したので、うまくいくはずですか?

しかし、関数が DateValue() を呼び出す行で型の不一致 (実行時エラー コード 13) がスローされ続けます。渡された範囲は、エディターでカーソルを合わせると 1 の値 (それが参照するセル内の数値) を示しますが、それがセルの内容なのか、それとも他の値 1 が表示されているのかわかりません。

ですから、なぜこれが起こっているのかを正確に知る方法は本当にわかりません。私が渡した範囲がどういうわけか正しい種類ではないということですか?このコードが機能しない理由を教えてください!

その行をその下のコメント行に変更しようとしました (および他のいくつかの盲目的な変更) が、同じエラーが発生します。

前もって感謝します!

    Sub redTextToRealDates()

    Dim dateTemp As Date
    Dim redCell As Range
    Dim foundCell As Range
    Dim thisSheetsRange As Range
    Dim busyCell As Range
    Dim redTextCells As Range
    Set thisSheetsRange = ActiveSheet.usedRange

    'Build a range containing all the cells in a sheet containing red text.
    '  well... all cells formatted to HAVE red text, anyway.
    '  Anyone want to tell me how to write this to skip empty cells?
    '  Because I don't need to grab empty cells into this range...

    For Each busyCell In thisSheetsRange
        If (busyCell.Font.ColorIndex()) = 3 Then
            If redTextCells Is Nothing Then
            Set redTextCells = busyCell
            Else: Set redTextCells = Union(redTextCells, busyCell)
            End If
        End If
    Next busyCell

    'Change unknown format cells to date cells populated with concantenated
    'string of original contents and the active sheet's name.

    For Each foundCell In redTextCells
        foundCell.NumberFormat = "@"
        foundCell = GetConcantDate(foundCell)

    Next foundCell

    redTextCells.NumberFormat = "dd/mm/yy"
    On Error Resume Next


    End Sub


    Function GetConcantDate(rng As Range) As Date
        'Original code supplied by ThinkerIV on StackOverflow.com
        Dim dtTemp As Date
        dtTemp = DateValue(rng.Range("A1").Value & " " & rng.Parent.Name)
         'dateTemp = DateValue(foundCell.Value & " " & ActiveSheet.Name)
        GetConcantDate = dtTemp
    End Function

編集私はまだ自分の答えを投稿できないので、この解決策を追加しています:

Format() にデータを入力すると、赤でフォーマットされた最初のセルの内容がテキスト形式ではありませんでした。適切なデータ型を渡すことを保証する方法は何も用意していませんでした。したがって、関数に渡す前にセルをテキストとしてフォーマットする行 (foundCell.NumberFormat = "@") が修正されました。

コードをコピーして質問に貼り付けたときに、ソリューションは実際に既に作成されていました-別のサブで別のエラーが発生したために修正されたことに気づきませんでした。(私は初心者で、複数のサブウーファーで複数のエラーを処理するのに混乱していました)その新しい行でもう一度試したと思いましたが、持っていなかったので、まだ機能していないと思いました.

助けてくれたすべての人に感謝します。そのように見つけた今、私は少しばかげていると感じています。私の新人フラバーを許してください-エディタの巨大なリストにあまりにも多くのサブと関数があり、私は「めまい」を感じました...少なくとも、他の初心者がそれを必要とする場合に備えて、解決策を投稿できます!

4

1 に答える 1

0

わかりました、ここには2つのことがあると思います。まず、DateValue 関数は日付の文字列表現 (例: "01/01/2013") を受け取ります。範囲から Excel の日付を渡す場合、41275 のような数値を渡します。これにより、実行時エラー 13 がスローされます。 .

ただし、既に日付がある場合は、わざわざ変換する必要はありません。すべての赤いセルを日付 + シート名に変換したいようです。これを行うには、「01/01/2013 Sheet1」などの文字列が必要になるため、ここでは DateValue を使用できません。代わりに、おそらく次のようなことを試してください。

Public Function GetConcatDate(rng As Range) As String
    Dim dtTemp As String
    dtTemp = Format(rng.Range("A1").Value, "dd/mm/yyyy") & " " & rng.Parent.Name
    GetConcatDate = dtTemp
End Function
于 2013-07-31T00:35:00.413 に答える