首页 > 解决方案 > 打开文件中的宏如果你在开会,点击“确定”,如果没有,在excel中再次提及

问题描述

我想从表格中发出约会通知。如果已完成,请单击“确定”,并在 B 列中的表格中写入。如果没有,请在下次开发文件时重做。

这就是我所知道的,我不知道如何将 Okay 列 B 放在相应的行中,并使其重新出现。

Private Sub Workbook_Open()
    For Each cell In Sheets("appointments").Range("A1:B500")
        '''If cell.value = "yes" Then '''By column B
        If cell.value = Date Then
            MsgBox "appointments" & cell.Offset(0, 4).value, vbExclamation + vbYesNo + vbQuestion, "appointments"
        End If
    Next cell
End Sub

我将不胜感激任何帮助,想法,概念。

编辑:最后找到正确答案

标签: vbaexcel

解决方案


这里有几个想法

  1. 不要cell用作变量。它太接近预定义的对象 ( Cells)。相反,尝试MyCell(或其他任何方法)。你还需要声明这个变量,这导致我#2
  2. Option Explicit. 始终在标题处使用它
  3. 设置要循环的动态范围。我猜你只是想Column A从第二行(标题?)循环到最后使用的行
  4. 您需要将MsgBox输入设置为变量,然后If Then围绕结果构建语句
  5. 考虑使用vbYesNoCancel. 如果你想打开这本书快速检查一些东西而不回答一系列不可避免的弹出窗口怎么办?没有必要,但您可以选择CancelExit Sub

MsgBox为了便于阅读,我在这里取出了你的文字。也许您应该将提示更改为类似Have you completed [this] appointment?的内容,这将产生Yes,No或的选项Cancel

Option Explicit

Private Sub Workbook_Open()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Appointment")
Dim MyCell As Range, LRow As Long, Ans As String

LRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

For Each MyCell In ws.Range("A2:A" & LRow) '<=== Dynamic Range
    If MyCell = Date Then
    Ans = MsgBox("Select One", vbYesNoCancel)
        If Ans = vbYes Then
            'Do something if YES
        ElseIf Ans = vbNo Then
            'Do something if NO
        ElseIf Ans = vbCancel Then
            'Do something if CANCEL (Exit Sub?)
        End If
    End If
Next MyCell

End Sub

推荐阅读