我正在开发一个VBA程序,它允许用户键入地址并通过将地址的元素与数据库匹配来查找位置.
不幸的是,我在案例敏感性方面经常遇到问题.
例如,当我使用此代码时:
For i = 11 To lRowB
Range("B" & i).Activate
myResult = IsNumeric(Application.Match(ActiveCell.Value, manilaListRange, 0))
Run Code Online (Sandbox Code Playgroud)
它会将活动单元格的值与我的数据库中的单词列表进行比较.问题是,如果在我的活动单元格中,单词是"miami"或"MIAMI",只有"迈阿密"在数据库中,它将无法工作......
其他例子:
If Range("J6").Value = "tawi" Then
Range("J6").Value = "Tawi-Tawi"
End If
Run Code Online (Sandbox Code Playgroud)
同样的问题,只有用相同案例写的字才会起作用.
我怎么能摆脱这个?这特别烦人,我不能在每种情况下都可以重写我的数据库!
提前致谢 !
我已经阅读并应用了类似主题的解决方案,但在我的案例中似乎没有任何效果.
所以,我想将一个变量从我的Module1的一个子传递给一个userform.这是一个名为"provinceSugg"的字符串.
这是我的代码的相关部分:
Public provinceSugg As String
Sub probaCity()
[...]
If province = "" And city <> "" Then
provinceSugg = sCurrent.Cells(p, db_column).Offset(0, 1).Value
UserForm2.Label1 = "Do you mean " & city & " in " & provinceSugg & " ?"
UserForm2.Label1.TextAlign = fmTextAlignCenter
UserForm2.Show
Else
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
然后在我的userform代码中:
Private Sub userformBtn1_Click()
MsgBox provinceSugg
sMain.Range("J6").Value = provinceSugg
End Sub
Run Code Online (Sandbox Code Playgroud)
当我运行我的程序时:
1 /我有来自my sub的MsgBox中显示的provinceSugg的内容(因此有一个provinceSugg,它不是一个空变量).
2 /从userform调用的MsgBox为空(因此传递值失败)并且我的程序在运行"sMain.Range("J6")时崩溃.值= provinceSugg",类似于"Error 424 Object Required"(所以变量无法传递给userform).
我尝试了我在论坛和这里找到的所有东西(不同的方式来表明provinceSugg是一个公共变量,但仍然崩溃......).
在此先感谢您的帮助 !
我在我的excel程序中使用匹配函数,但我有一个问题,因为它只选择相同的匹配.例如,如果将具有"Banana"的单元格与具有"Banana"的另一个单元格进行比较,则它将起作用并返回正值.
但是如果你将"Banana"与一个内容为"Banana choco"的细胞进行比较,那么它就不会认识到香蕉这个词在细胞中.
在我的情况下,我想在句子中发现一个单词时返回一个TRUE值.
这是我的代码:
Worksheets("sBldgMakati").Activate
For i = 2 To 605
Range("B" & i).Activate
myResult = IsNumeric(Application.Match(ActiveCell.Value, elementsListRange, 0))
If myResult Then
Range("K" & i).Value = Range("K" & i).Value + 10
Else
Range("K" & i).Value = Range("K" & i).Value + 0
End If
Next i
Run Code Online (Sandbox Code Playgroud)
我必须在此代码中指定elementsListRange
对应于一系列单元格,其内容只有一个单词(例如"Banana"),并且ActiveCell.value
通常是一个较长的表达式(例如"Banana choco").
在此先感谢您的帮助 !
在我的程序中,用户输入邮政编码并获取与邮政编码(省、市、区)相关的输出信息。为此,我使用 Vlookup 函数。所以,用户:
我使用这段代码来执行此操作:
If Range("J9").Value <> "N/A" Then 'if there is actually a zip code entered by the user (if not, it will be "N/A")
cityZip = Application.WorksheetFunction.VLookup(sMain.Range("J9").Value,
sZipCodes.Range("B2:E864"), 3, False)
barangayZip = Application.WorksheetFunction.VLookup(sMain.Range("J9").Value,
sZipCodes.Range("B2:E864"), 2, False)
provinceZip = Application.WorksheetFunction.VLookup(sMain.Range("J9").Value,
sZipCodes.Range("B2:E864"), 4, False)
sMain.Range("J7").Value = provinceZip
sMain.Range("J13").Value = cityZip
sMain.Range("J16").Value = barangayZip
Else
End If
Run Code Online (Sandbox Code Playgroud)
当我的数据库中有邮政编码时,它可以完美地工作。但如果没有,它会导致程序的执行崩溃,并且出现错误消息(例如“执行错误'1004',无法读取 Vlookup ...)。如何修改我的代码以仅说明如果没有匹配项,那么它应该什么也不做?我不知道如何在 Vlookup 函数中引入这个请求。
提前致谢 !
编辑:这是我的新代码,遵循蒂姆·威廉姆斯的建议:
'Using Zip Code
If Range("J9").Value <> "N/A" Then
provinceZip = Application.Lookup(sMain.Range("J9").Value, sZipCodes.Range("B2:E907"), 4, …
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中有一个按钮,允许我打开自定义alertdialog.此警报对话框从XML文件中获取其内容:我在其中有一个按钮(称为filterButton),单选按钮和滑块.以编程方式,还添加了两个按钮(确定,取消).
当我打开对话框警报时,内容会完美显示,但到目前为止还没有创建任何事件.(所以打开alertdialog并显示内容没问题)
现在,我想为我的"filterButton"添加一个监听器.所以一如既往,我以这种方式声明了我的按钮(Button filterButton;),setOnClickListener(在我的onCreate中):
filterButton = (Button) findViewById(R.id.filter_button);
filterButton.setOnClickListener(filter_listener);
Run Code Online (Sandbox Code Playgroud)
然后我定义我的听众:
OnClickListener filter_listener = new OnClickListener() {
@Override
public void onClick(View v) {
// showPopupMenu(v);
} };
Run Code Online (Sandbox Code Playgroud)
我在里面注释掉了这个方法,以确保问题不是来自这个方法.因此,当我这样做时,当我尝试运行我的应用程序时,它只是在我尝试打开按钮打开alertdialog时的活动时崩溃.当我取下这几行时,它再次起作用.我不明白,它没有意义,它只是一个带有听众的按钮,我有几十个像这样没有问题,所以为什么它在我的警报对话中有问题?
ps:我的logcat像往常一样无用,只是说Fatal Error和nullpointerexception没有细节.
编辑:我改变了如下建议:
filterButton = (Button) alertDialog.findViewById(R.id.filter_button);
filterButton.setOnClickListener(filter_listener);
Run Code Online (Sandbox Code Playgroud)
我把它放在这里,因为如果放在程序的开头,它是用红色强调alertDialog,但它仍然崩溃:
OnClickListener dialog_listener = new OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater myLayout = LayoutInflater.from(context);
View dialogView = myLayout.inflate(R.layout.alertdialog_filter, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
Bundle bundle = getIntent().getExtras();
int filterVariable = bundle.getInt("filterVariable");
alertDialogBuilder.setTitle("Filter Mode");
alertDialogBuilder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface …
Run Code Online (Sandbox Code Playgroud) 我在这里阅读了一些关于如何使用例如collections.sort或sortOrder按字母顺序排列列表视图的主题,但我无法使其在我的情况下工作,因为我没有使用arraylist.
我的listview填充了首先放入游标的数据库中的元素,这样:
private void displayListView() {
// getExtra
Bundle bundle = getIntent().getExtras();
String title = bundle.getString("title", "Choose here :");
String inInterval = bundle.getString("inInterval");
Log.d(TAG, "inInterval = " + inInterval);
poititle.setText(title);
// put the results of the method in a cursor
c = dbHelper.findPoiInTable(inInterval);
displayCursor();
}
private void displayCursor() {
String[] columns = new String[] { DatabaseAdapter.COL_NAME,
DatabaseAdapter.COL_STREET, DatabaseAdapter.COL_WEBSITE,
DatabaseAdapter.COL_TELEPHONE, DatabaseAdapter.COL_REMARKS,
DatabaseAdapter.COL_PRICE, DatabaseAdapter.COL_MOBILE };
int[] to = new int[] { R.id.name, R.id.street, R.id.website,
R.id.telephone, R.id.remarks, R.id.price, R.id.mobile };
cursorAdapter = new …
Run Code Online (Sandbox Code Playgroud) 我有一个问题我认为很简单,但我不知道这样做的正确方法.
基本上,我希望我的程序能够识别出具有特定模式的单词,如果是,则提取模式之前的内容.
在这种情况下/F
,模式将特别在单词的末尾,并且它将提取之前的内容.
例如,如果程序找到21/F
,它会将其识别为良好匹配并将提取21
.但如果这个词是21/Fudge
,它就什么都不做.
你知道在单词中的特定位置寻找匹配的方法吗?
我注意到当我使用If语句尝试将不同范围的单元格设置为变量cityListRange时,我的VBA程序不再起作用了.基本上,如果单元格"A:20"的内容是"Metro Manila",我想将cityListRange初始化为G21:G37(马尼拉大都会的城市列表).如果没有,那么它将是另一个列表(G41:G43)(稍后在我的代码中它使用与cityListRange作为参考的匹配方法).
Set ws = ThisWorkbook.Sheets("Feuil2")
With ws
If Range("A20").Value = "Metro Manila" Then
Set cityListRange = .Range("G21:G37") 'list of cities to compare to (IN METRO MANILA)
Else
Set cityListRange = .Range("G41:G43") 'list of cities to compare to (IN PROVINCE)
End If
End With
Run Code Online (Sandbox Code Playgroud)
当我将cityListRange初始化为一个且只有一个范围时,我的整个程序工作正常,但是当我添加我的if语句时,它停止工作,并且在程序结束时没有返回任何结果.你知道在这种情况下是否有使用If语句的反指示?如果是这样,最好的写作方式是什么?提前致谢 !