I did check your code, writing here my findings 
1- Variable name is misleading, dt_input but its of type Array of strings, should be changed to something like arr_int_Indexes, for example, as you will see later on your code that the variable is trying to be used as datatable, but its not.

2- 1st assign inside the said ForEach, is also thinking that the RowIndex variable is a DataRow, as it is trying to index it on position 0, but what we have now is a index, not a datarow, so it needs to be remapped as following:
- Taking into consideration that we are iterating an array of int32, and that this array will have the values 2,4 on it, as those are the ones with CaseID 25 and 12, this is a graphical representation of what we have inside each loop. First loop being the green number, and 2nd group being the blue number.
So Inside each loop, and by having the number, we initially can’t find data in the DataRow, until we say wich Row we want to work on.
In that case, our DataRow will be found by doing the following:
- dt_Excel as master DataTable
- RowIndex as Row Index
- Column name as descriptor of what to find
dt_excel.Rows(RowIndex)("CaseID").ToString
Translated to data:
1st Loop: dt_excel.Rows(2)("CaseID").ToString -> Green Number, CaseID Column.
2nd Loop: dt_excel.Rows(4)("CaseID").ToString -> Blue Number, CaseID Column.
- 2nd assign would be the same, but with
dt_excel.Rows(RowIndex)("CreaterName").ToString

3- Last but not least, the same case on the latest Multiple assign. we need to aim for the master data table (dt_excel), find the desired row (RowIndex), and update the 2 columns’ value (“CaseStatus”, “DateTime”)
- You had it correct, you just needed to reference to the Excel DataTable, instead of the confusing dt variable you had at the start, and I believe that instead of “CaseStatus”, you want to point to “Status” Column, but might be wrong





4- Extra: You have an “IF” checking if both caseID and SNumb are empty, I guess to skip them, but you are invoking it before filling those variables.
- If I’m right and you want to “skip” those lines where both values are empty, apply an initial filter instead, and this way you will never have one of this rows going into the ForEach:
Before:

After (Keep only rows where those 2 values are not null, or empty):
dt_Excel.AsEnumerable.Where(Function(x) _
Not String.IsNullOrEmpty(x("CaseID").ToString) AndAlso
Not String.IsNullOrEmpty(x("ServiceNum").ToString)
).AsDataView.ToTable
- Fixed also this LINQ, as it is not working due to variables not being filled previously, and columns not matching your excel columns.
- “ServiceNumber” = “ServiceNum”


Added this to test, but they need to be adapted to what you need:


Find your file attached and corrected, did not test it all as It is using mails 
TestExcel (1).xaml (36.2 KB)
Test.xlsx (10.6 KB)
BR,
Ignasi